import { Injectable } from "@nestjs/common";

/**
 * 测试服务类 (TestService)
 *
 * 这是一个简单的测试服务，用于演示 NestJS 服务的基本结构和功能
 *
 * 服务的特点：
 * 1. 使用 @Injectable() 装饰器标记为可注入的服务
 * 2. 包含业务逻辑方法
 * 3. 可以被控制器或其他服务注入使用
 * 4. 遵循单一职责原则
 */
@Injectable()
export class TestService {
  /**
   * 生成数字范围数组
   *
   * 这个方法演示了：
   * 1. 参数类型检查
   * 2. 数组生成和转换
   * 3. 统一的响应格式
   * 4. 错误处理
   *
   * 算法解析：
   * 1. Array(num) - 创建长度为 num 的稀疏数组
   * 2. Array.from(Array(num).keys()) - 将稀疏数组转换为 [0, 1, 2, ..., num-1]
   * 3. .map((num) => num + 1) - 将每个元素加1，得到 [1, 2, 3, ..., num]
   *
   * 示例：
   * - getRange(5) 返回 [1, 2, 3, 4, 5]
   * - getRange(0) 返回 []
   * - getRange("abc") 返回错误响应
   *
   * @param num 要生成的数字范围上限
   * @returns 包含状态码、数据和消息的标准响应对象
   */
  getRange(num: number) {
    // 类型检查：确保参数是数字类型
    // 这是防御性编程的体现，避免运行时错误
    if (typeof num === "number") {
      // 生成从0开始的数字数组：[0, 1, 2, ..., num-1]
      const arr = Array.from(Array(num).keys());

      // 返回成功响应
      // 使用统一的响应格式：{ code, data, message }
      return arr.map((num) => num + 1); // 转换为 [1, 2, 3, ..., num]
    } else {
      // 返回错误响应
      // 当参数类型不正确时的处理
      return {
        code: 1, // 非0表示错误
        data: [], // 错误时返回空数组
        message: "参数错误",
      };
    }
  }

  /**
   * 以下是一些其他常见的服务方法示例（未实现）
   * 可以根据实际需求添加更多方法
   */

  /**
   * 数据验证示例
   * validateEmail(email: string): boolean {
   *   const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
   *   return emailRegex.test(email);
   * }
   */

  /**
   * 异步操作示例
   * async fetchData(id: number): Promise<any> {
   *   try {
   *     // 模拟异步操作（如API调用、数据库查询）
   *     const data = await someAsyncOperation(id);
   *     return {
   *       code: 0,
   *       data,
   *       message: '获取数据成功'
   *     };
   *   } catch (error) {
   *     return {
   *       code: 1,
   *       data: null,
   *       message: '获取数据失败'
   *     };
   *   }
   * }
   */

  /**
   * 数据转换示例
   * transformData(rawData: any[]): any[] {
   *   return rawData.map(item => ({
   *     id: item.id,
   *     name: item.name,
   *     createdAt: new Date(item.created_at).toISOString()
   *   }));
   * }
   */
}
